package logica.DAO;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import objetosNegocio.Almacen;
import objetosNegocio.ListaAlmacenes;

public class DAOAlmacen implements InterfazDAOAlmacen {

	private DAOConnection connection; //Conexion a BBDD
	
	/**
	 * Constructura clase DAOAlmacenImp
	 * @param connection - Objeto que encapsula la conexion a la bbdd
	 */
	public DAOAlmacen(DAOConnection connection){
		this.connection = connection;
	}
	
	
	public boolean insertarRegistro(Almacen datos) throws SQLException 
	{
		boolean insertado = false;
		Statement stmt = null;
				
		String sentenciaSQL = "";  		//Siempre se inserta el almacen como activo (valor 0)
		sentenciaSQL =	"INSERT INTO gesal.Almacen (idAlmacen,nombre, activo,direccion,poblacion,codPostal,telefono,email) VALUES (";
		sentenciaSQL+= "NULL," + "\"" + datos.getNombre() + "\",0,\"" + datos.getDireccion();
		sentenciaSQL+= "\",\"" + datos.getPoblacion() + "\",\"" + datos.getCodPostal();
		sentenciaSQL+= "\",\"" + datos.getTelefono() + "\",\"" + datos.getEmail()+ "\")";
		
		stmt = connection.getConnection().createStatement();
		if ((stmt.executeUpdate(sentenciaSQL))==1) insertado=true;
		stmt.close();
		
		return insertado;
	}

	public boolean modificarRegistro(Almacen datos) throws SQLException {
		boolean modificado = false;
		Statement stmt = null;
		
		int activo = datos.getActivo()? 0 : 1; //Pasamos de boolean a int
		
		String sentenciaSQL = "";
		sentenciaSQL = "UPDATE gesal.Almacen SET";
		sentenciaSQL+= " nombre=\"" + datos.getNombre() + "\",";
		sentenciaSQL+= " activo=\"" + activo + "\","; 
		sentenciaSQL+= " direccion=\"" + datos.getDireccion() + "\",";
		sentenciaSQL+= " poblacion=\"" + datos.getPoblacion() + "\",";
		sentenciaSQL+= " codPostal=\"" + datos.getCodPostal() + "\",";
		sentenciaSQL+= " telefono=\"" + datos.getTelefono() + "\",";
		sentenciaSQL+= " email=\"" + datos.getEmail() + "\"";
		sentenciaSQL+= " WHERE idAlmacen=" + datos.getId();
		
		stmt = connection.getConnection().createStatement();
		if ((stmt.executeUpdate(sentenciaSQL))==1) modificado=true;
		stmt.close();
		
		return modificado;
	}
	

	
	public boolean bajaRegistro(int codigo) throws SQLException {
		boolean baja = false;
		Statement stmt = null;
		
		String sentenciaSQL = "";
		sentenciaSQL = "UPDATE gesal.Almacen SET activo=1 WHERE idAlmacen=" + codigo;
		
		stmt = connection.getConnection().createStatement();
		if ((stmt.executeUpdate(sentenciaSQL))==1) baja=true;
		stmt.close();

		return baja;
	}

	
	
	public Almacen obtenerRegistro(int codigo) throws SQLException {
		ResultSet resul = null;
		Statement stmt = null;
		Almacen almacen = null;
		
		String sentenciaSQL = "";
		sentenciaSQL = "SELECT idAlmacen,nombre,activo,direccion,poblacion,codPostal,telefono,email";
		sentenciaSQL+= " FROM gesal.Almacen WHERE idAlmacen=" + codigo;
		
		stmt = connection.getConnection().createStatement();
		resul = stmt.executeQuery(sentenciaSQL);
		
		//Si se encuentra el registro se tratan los datos
		if (resul.next()){  
			almacen= new Almacen();	
			almacen.setId(resul.getInt("idAlmacen"));
			almacen.setNombre(resul.getString("nombre"));
			almacen.setActivo((resul.getInt("activo")==0));
			almacen.setDireccion(resul.getString("direccion"));
			almacen.setPoblacion(resul.getString("poblacion"));
			almacen.setCodPostal(resul.getString("codPostal"));
			almacen.setTelefono(resul.getString("telefono"));
			almacen.setEmail(resul.getString("email"));
		}
		
		resul.close();
		stmt.close();
	
		return almacen;
	}


	public ListaAlmacenes obtenerListaRegistros() throws SQLException {
		return obtenerListado(false);
	}

	public ListaAlmacenes obtenerListaRegistrosActivos() throws SQLException {
		return obtenerListado(true);
	}
	
	private ListaAlmacenes obtenerListado(boolean soloActivos) throws SQLException {
		ResultSet resul = null;
		Statement stmt = null;
		
		Almacen almacen = null;
		ListaAlmacenes listado = new ListaAlmacenes();
		
		String sentenciaSQL = "";
		sentenciaSQL = "SELECT idAlmacen,nombre,activo,direccion,poblacion,codPostal,telefono,email FROM gesal.Almacen";
		
		if (soloActivos)
			sentenciaSQL+= " WHERE activo=0";
				
		//System.out.println(sentenciaSQL);
		
		stmt = connection.getConnection().createStatement();
		resul = stmt.executeQuery(sentenciaSQL);
		
		
		//Si se encuentra el registro se tratan los datos
		while (resul.next()){  
			almacen= new Almacen();	
			almacen.setId(resul.getInt("idAlmacen"));
			almacen.setNombre(resul.getString("nombre"));
			almacen.setActivo((resul.getInt("activo")==0));
			almacen.setDireccion(resul.getString("direccion"));
			almacen.setPoblacion(resul.getString("poblacion"));
			almacen.setCodPostal(resul.getString("codPostal"));
			almacen.setTelefono(resul.getString("telefono"));
			almacen.setEmail(resul.getString("email"));
			listado.add(almacen);
		}
		
		resul.close();
		stmt.close();
		return listado;
	}
	

}
